package main

import "fmt"

/**
类似析构函数操作：
按照调用顺序的相反顺序逐个执行
即使函数发生严重错误也会执行
常用于：
资源清理， 文件关闭， 解锁，记录时间等操作
通过与匿名函数配合可在return之后修改函数的计算结果
 */
func main() {
	//闭包与defer结合作用，i相当于引用的地址
	for i := 0;i<3 ;i++  {
		defer func() {
			fmt.Println(i)
		}()
	}
}

func deferFunction(){
	fmt.Println("a")
	defer fmt.Println("b")
	defer fmt.Println("c")

	for i := 0; i<3; i++ {
		defer fmt.Println(i)
	}
}